www.gusucode.com > 基于控制台的VC++ 图书管理系统-源码程序 > 基于控制台的VC++ 图书管理系统-源码程序/code/图书管理系统/book.cpp
//Download by http://www.NewXing.com //****************************************************************************************** // 这里的是有关书库管理的几个函数,包括添加,修改,删除和查找书的信息 //****************************************************************************************** #include "BookData.h" #include "First.h" //显示一本书的信息 void BookData::Show(void) { cout<<setw(20)<<"ISBN: " <<isbn<<endl; cout<<setw(20)<<"书名: " <<bookTitle<<endl; cout<<setw(20)<<"作者: " <<author<<endl; cout<<setw(20)<<"出版社: " <<publisher<<endl; cout<<setw(20)<<"进书日期: " <<dateAdded<<endl; cout<<setw(20)<<"库存量: " <<qtyOnHand<<" 本"<<endl; cout<<setw(20)<<"零售价: " <<retail<<" 元"<<endl; } //添加书的函数 void Add(void) { fstream file; BookData book; //临时变量 char flag; //判断是否继续添加的标置 char isbn[14],bookTitle[51],author[31],publisher[31], sdataAdded[11],date[9],sdate[9],sq[10],get[8];//存放输入量的临时值 int sqty; //存放输入的库存量 float swholesale,sretail; //存放输入的批发价与零售价 file.open("bookfile.dat",ios::in|ios::out|ios::binary); if(!file){ cout<<"书库文件打开失败。\n"; exit(0); } file.seekp(0L,ios::end); //写指针移到文件末尾 cout<<"你想添加书吗?(Y/N):"; cin>>flag; while(flag=='Y') { cout<<"请输入ISBN号:"; GetInt(13,13,isbn); book.setISBN(isbn); cout<<"请输入书名(不超过50个字符):"; GetString(50,bookTitle); book.setTitle(bookTitle); cout<<"请输入作者:"; GetString(30,author); book.setAuthor(author); cout<<"请输入出版单位:"; GetString(30,publisher); book.setPublisher(publisher); cout<<"请输入进书的日期(以YYYY-MM-DD的形式写):"; GetDate(date); while(!boolDate(date)) //判断日期是否合法 { cout<<"请重新输入:"; GetDate(date); } while(true) //判断日期是否在系统日期之后 { //获取系统日期 char date[30]; _strdate(date); sdate[0]=sdataAdded[5]; sdate[1]=sdataAdded[6]; sdate[3]=sdataAdded[8]; sdate[4]=sdataAdded[9]; sdate[6]=sdataAdded[2]; sdate[7]=sdataAdded[3]; sdate[2]='/'; sdate[5]='/'; sdate[8]='\0'; if (strcmp(sdate,date)>0) { cerr<<"日期错误!今天才"<<date<<"(月/日/年)"<<endl; cerr<<"请重新输入:"; GetDate(sdataAdded); } else break; } book.setDateAdded(sdataAdded); cerr<<"请输入库存量:"; GetInt(10,0,sq); sqty=atoi(sq); book.setQty(sqty); cerr<<"请输入批发价:"; GetFloat(get); swholesale=(float)atof(get); book.setWhole(swholesale); cerr<<"请输入零售价:"; GetFloat(get); sretail=(float)atof(get); book.setRetail(sretail); file.write((char*)&book,sizeof(book)); //写入文件 system("cls"); cerr<<"你所添加的书的信息是:\n"; book.Show(); cerr<<"还想继续添加吗?(Y/N):"; cin>>flag; cin.ignore(80,'\n'); while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N')) { cerr<<"请输入Y/N:"; cin>>flag; cin.ignore(80,'\n'); } } if ((flag=='n')||(flag=='N')) {file.flush();file.close();} } //查找书的信息 //1、实现模糊查询 int BookData::Match(int list,char look[]) { int i,j,k; //按书名 if (list==1) { for(i=0;i<=(int)(strlen(bookTitle)-strlen(look));i++) { for(k=i,j=0;((bookTitle[k]==look[j])&&(look[j]!='\0'));k++,j++); if(look[j]=='\0') return 1; if ((bookTitle[k]==look[j])&&(bookTitle[k]!='\0')) return 1; } return 0; } //按ISBN号 else{ for(i=0;i<=(int)(strlen(isbn)-strlen(look));i++) { for(k=i,j=0;((isbn[k]==look[j])&&(look[j]!='\0'));k++,j++); if(look[j]=='\0') return 1; if ((isbn[k]==look[j])&&(look[j]=='\0')) return 1; } return 0; } } //2.实现查找 void LookUp(void) { char choice,flag; //choice获得ISBN号查询与书名查询选择结果 char look[51],clear[51]={0}; int site,count,i; //计数 Sale book; fstream file; file.open("bookfile.dat",ios::in|ios::out|ios::binary); if(!file){ cerr<<"书库文件打开失败。\n"; exit(0); } cerr<<"你想查找书吗?(Y/N):"; cin>>flag; cin.ignore(80,'\n'); while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N')) { cerr<<"请输入Y/N:"; cin>>flag; cin.ignore(80,'\n'); } while((flag=='y')||(flag=='Y')) { cerr<<"使用ISBN号查找或使用书名查找?(I/N)"; cin>>choice; cin.ignore(80,'\n'); while((choice!='I')&&(choice!='N')&&(choice!='i')&&(choice!='n')) { cerr<<"请输入I/N:"; cin>>choice; cin.ignore(80,'\n'); } switch(choice) { //按ISBN号查找 case 'i': case 'I': cerr<<"请输入要查找的ISBN号:"; GetInt(13,0,look); count=0; //计数清零 file.seekg(0L,ios::beg); for(i=0;!file.eof();i++) { book.setISBN(clear); //在显示完了之后把ISBN号清零,避免重复输出 file.read((char*)&book,sizeof(book));//从文件中读一个书的信息 site=book.Match(2,look); //判断要查找的书是否存在 if (site==1) {cerr<<"您要查找的书是:"<<count+1<<"\n"; book.Show(); cerr<<endl; getch(); count++; if ((count%2)==0) system("cls"); //分屏显示 } } if (count==0) {cerr<<"对不起,书库中无此书!"; getch(); } else {cerr<<"共找到"<<count<<"本书。"; getch(); } system("cls"); cerr<<"还要查找吗?(Y/N)"; cin>>flag; cin.ignore(80,'\n'); while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N')) { cerr<<"请输入Y/N:"; cin>>flag; cin.ignore(80,'\n'); } break; //按书名查找 case 'n': case 'N': cerr<<"请输入要查找的书名:"; GetString(51,look); file.seekg(0L,ios::beg); for(i=0;!file.eof();i++) { book.setTitle(clear); file.read((char*)&book,sizeof(book));//从文件中读一个书的信息 site=book.Match(1,look); if (site==1) {cerr<<"您要查找的书是:"<<i+1<<"\n"; book.Show(); getch(); cerr<<endl; count++; if ((count%2)==0) system("cls"); } } if (count==0) {cerr<<"对不起,书库中无此书!"; getch(); } else {cerr<<"共找到"<<count<<"本书。"; getch(); } system("cls"); cerr<<"还要查找吗?(Y/N)"; cin>>flag; cin.ignore(80,'\n'); while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N')) { cerr<<"请输入Y/N:"; cin>>flag; cin.ignore(80,'\n'); } break; } } file.close(); } //修改书的信息 void Edit(void) { char news[14],sdate[9]; //临时变量 int site,i,newss; float ne; char choice,flag; long post; fstream file; Sale book; file.open("bookfile.dat",ios::in|ios::out|ios::binary); if(!file){ cerr<<"书库文件打开失败。\n"; exit(0); } cerr<<"你想修改书吗?(Y/N):"; cin>>flag; cin.ignore(80,'\n'); while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N')) { cerr<<"请输入Y/N:"; cin>>flag; cin.ignore(80,'\n'); } while((flag=='y')||(flag=='Y')) { cerr<<"请输入要修改的ISBN号:"; GetInt(13,13,news); file.seekg(0L,ios::beg); for(i=0;!file.eof();i++) { file.read((char*)&book,sizeof(book));//从文件中读一个书的信息 site=book.Match(2,news); //判断要修改的书是否存在 if (site==1) {cerr<<"您要修改的书的信息是:\n"; book.Show(); cerr<<endl; post=file.tellg(); //得到读指针的位置 break; } } if (site==0) {cerr<<"对不起,找不到您要修改的书!"; getch(); } if (site==1) { cerr<<"1.ISBN号; 2.书名; 3.作者; 4.出版社;\n5.进书日期;6.库存量;7.批发价;8.零售价;9.所有\n"; cerr<<"请选择要修改的内容:\n"; cin>>choice; cin.ignore(80,'\n'); while((choice>'9')||(choice<'1')) { cerr<<"对不起,您输入的不是1-9之间的数! 请输入1-9之间的数:"; cin>>choice; cin.ignore(80,'\n'); } system("cls"); switch(choice) { case '1':cerr<<"\n原来的ISBN号为"<<book.getISBN()<<endl; cerr<<"请输入新的ISBN号:"; GetInt(13,13,news); book.setISBN(news); break; //设置新的ISBN号 case '2':cerr<<"\n原来的书名为"<<book.getTitle()<<endl; cerr<<"请输入新的书名:"; GetString(50,news); book.setTitle(news); break; //设置新的书名 case '3':cerr<<"\n原来的作者为"<<book.getAuthor()<<endl; cerr<<"请输入新的作者:"; GetString(30,news); book.setAuthor(news); break; //设置新的作者 case '4':cerr<<"\n原来的出版社为"<<book.getPublisher()<<endl; cerr<<"请输入新的出版社:"; GetString(30,news); book.setPublisher(news); break; //设置新的出版社 case '5':cerr<<"\n原来的进书日期为"<<book.getDateAdded()<<endl; cerr<<"请输入新的进书日期:"; GetDate(news); while(!boolDate(news)) { cerr<<"请重新输入:"; GetDate(news); } while(true) { //获取系统日期 char date[30]; _strdate(date); sdate[0]=news[5]; sdate[1]=news[6]; sdate[3]=news[8]; sdate[4]=news[9]; sdate[6]=news[2]; sdate[7]=news[3]; sdate[2]='/'; sdate[5]='/'; sdate[8]='\0'; if (strcmp(sdate,date)>0) { cerr<<"日期错误!今天才"<<date<<"(月/日/年)"<<endl; cerr<<"请重新输入:"; GetDate(news); } else break; } book.setDateAdded(news); break; //设置新的进书日期 case '6':cerr<<"\n原来的库存量为"<<book.getQty()<<endl; cerr<<"请输入新的库存量:"; GetInt(10,0,news); newss=atoi(news); book.setQty(newss); break; //设置新的库存量 case '7':cerr<<"\n原来的批发价为"<<book.getWhole()<<endl; cerr<<"请输入新的批发价:"; GetFloat(news); ne=(float)atof(news); book.setWhole(ne); break; //设置新的批发价 case '8':cerr<<"\n原来的零售价为"<<book.getRetail()<<endl; cerr<<"请输入新的零售价:"; GetFloat(news); ne=(float)atof(news); book.setRetail(ne); break; //设置新的零售价 case '9':cerr<<"请输入新的ISBN号:\n"; GetInt(13,13,news); book.setISBN(news); cerr<<"请输入新的书名:"; GetString(50,news); book.setTitle(news); cerr<<"请输入新的作者:"; GetString(30,news); book.setAuthor(news); cerr<<"请输入新的出版社:"; GetString(30,news); book.setPublisher(news); cerr<<"请输入新的进书日期:"; GetDate(news); while(!boolDate(news)) { cerr<<"请重新输入:"; GetDate(news); } while(true) { //获取系统日期 char date[30]; _strdate(date); sdate[0]=news[5]; sdate[1]=news[6]; sdate[3]=news[8]; sdate[4]=news[9]; sdate[6]=news[2]; sdate[7]=news[3]; sdate[2]='/'; sdate[5]='/'; sdate[8]='\0'; if (strcmp(sdate,date)>0) { cerr<<"日期错误!今天才"<<date<<"(月/日/年)"<<endl; cerr<<"请重新输入:"; GetDate(news); } else break; } book.setDateAdded(news); cerr<<"请输入新的库存量:"; GetInt(10,0,news); newss=atoi(news); book.setQty(newss); cerr<<"请输入新的批发价:"; GetFloat(news); ne=(float)atof(news); book.setWhole(ne); cerr<<"请输入新的零售价:"; GetFloat(news); ne=(float)atof(news); book.setRetail(ne); break; //设置新的全部信息 } cerr<<"修改成功!"; getch(); } file.seekp(post-sizeof(book),ios::beg); file.write((char*)&book,sizeof(book)); //写入文件 system("cls"); cerr<<"还要再修改吗?(Y/N):"; cin>>flag; cin.ignore(80,'\n'); while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N')) { cerr<<"请输入Y/N:"; cin>>flag; cin.ignore(80,'\n'); } } file.flush(); file.close(); } //删除书的信息 void Delete(void) { fstream file; Sale book; char fflag,flag; char dele[14]; int i,site; long post; file.open("bookfile.dat",ios::in|ios::out|ios::binary); if(!file){ cerr<<"书库文件打开失败。\n"; exit(0); } cerr<<"你想删除书吗?(Y/N):"; cin>>flag; cin.ignore(80,'\n'); while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N')) { cerr<<"请输入Y/N:"; cin>>flag; cin.ignore(80,'\n'); } while((flag=='y')||(flag=='Y')) { cerr<<"请输入要删除的ISBN号:"; GetInt(13,13,dele); file.seekg(0L,ios::beg); for(i=0;!file.eof();i++) { file.read((char*)&book,sizeof(book)); //从文件中读一个书的信息 site=book.Match(2,dele); //判断要删除的函数是否存在 if (site==1) {cerr<<"您要删除的书的信息是:\n"; book.Show(); cerr<<endl; getch(); post=file.tellg(); break; } } if (site==1) { cerr<<"\n确定要删除吗?(Y/N):"; cin>>fflag; cin.ignore(80,'\n'); while((fflag!='y')&&(fflag!='Y')&&(fflag!='n')&&(fflag!='N')) { cerr<<"请输入Y/N:"; cin>>fflag; cin.ignore(80,'\n'); } if ((fflag=='y')||(fflag=='Y')) {book.removebook(); file.seekp(post-sizeof(book),ios::beg); file.write((char*)&book,sizeof(book));//写入文件 cerr<<"删除成功!"; getch(); } else {cerr<<"删除取消!"<<endl; getch(); } } else {cerr<<"对不起,您要删除的书找不到!"; getch(); } system("cls"); cerr<<"还要再删除吗?(Y/N):"; cin>>flag; cin.ignore(80,'\n'); while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N')) { cerr<<"请输入Y/N:"; cin>>flag; cin.ignore(80,'\n'); } } file.close(); }